/*
给定一个长度为 n 的数组 A1,A2,⋅⋅⋅,An。

你可以从中选出两个数 Ai 和 Aj(i 不等于 j)，然后将 Ai 和 Aj 一前一后拼成一个新的整数。

例如 12 和 345 可以拼成 12345 或 34512。

注意交换 Ai 和 Aj 的顺序总是被视为 2 种拼法，即便是 Ai=Aj 时。

请你计算有多少种拼法满足拼出的整数是 K 的倍数。

输入格式
第一行包含 2 个整数 n 和 K。

第二行包含 n 个整数 A1,A2,⋅⋅⋅,An。

输出格式
一个整数代表答案。

数据范围
1≤n≤105,
1≤K≤105,
1≤Ai≤109
输入样例：
4 2
1 2 3 4
输出样例：
6
*/
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
LL a[N], s[11][N];
int n, m;

int main(int argc, const char **argv)
{
    cin >> n >> m;
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
        LL temp = a[i] % m;
        for (int j = 0; j < 11; j++)
        {
            s[j][temp]++;
            temp = temp * 10 % m;
        }
    }
    LL res = 0;
    for (int i = 0; i < n; i++)
    {
        LL temp = a[i] % m;
        int len = to_string(a[i]).size();
        res += s[len][n - temp];
        // 检测一下 a[i]和a[i]是否能同样构成符合条件的K的倍数

        while (len--)
            a[i] = a[i] * 10 % m;
        if (a[i] % m == 0)
            res--;
    }
    cout << res << endl;
    return 0;
}